// 简单工厂模式

package simpleFactory

import "fmt"

// 定义接口Product，定义接口存在方法Use
type Product interface {
	Use()
}

// productA继承Product，但外部不可见
type productA struct {
	Product
}

// productB继承Product，但外部不可见
type productB struct {
	Product
}

func (p *productA) Use() {
	fmt.Println("ProductA")
}

func (p *productB) Use() {
	fmt.Println("ProductB")
}

// 对外暴露工厂方法，根据参数创建不同的产品
func ProductFactory(name string) Product {
	switch name {
	case "A":
		return &productA{}
	case "B":
		return &productB{}
	default:
		return nil
	}
}

/*
func main() {
	product := simpleFactory.ProductFactory("A")
	product.Use()
	product = simpleFactory.ProductFactory("B")
	product.Use()
}
*/
